[INFO] crate dssim 2.9.9 is already in cache [INFO] extracting crate dssim 2.9.9 into work/ex/clippy-test-run/sources/stable/reg/dssim/2.9.9 [INFO] extracting crate dssim 2.9.9 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/dssim/2.9.9 [INFO] validating manifest of dssim-2.9.9 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 dssim-2.9.9 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 dssim-2.9.9 [INFO] finished frobbing dssim-2.9.9 [INFO] frobbed toml for dssim-2.9.9 written to work/ex/clippy-test-run/sources/stable/reg/dssim/2.9.9/Cargo.toml [INFO] started frobbing dssim-2.9.9 [INFO] finished frobbing dssim-2.9.9 [INFO] frobbed toml for dssim-2.9.9 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/dssim/2.9.9/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 dssim-2.9.9 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/dssim/2.9.9:/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] a51887b653f7d209e53522e278fb12e3c2ccc423e65609b628188f68969826b5 [INFO] running `"docker" "start" "-a" "a51887b653f7d209e53522e278fb12e3c2ccc423e65609b628188f68969826b5"` [INFO] [stderr] Checking rgb v0.8.12 [INFO] [stderr] Checking imgref v1.3.5 [INFO] [stderr] Checking lodepng v2.4.2 [INFO] [stderr] Checking dssim v2.9.9 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dssim.rs:88:13 [INFO] [stderr] | [INFO] [stderr] 88 | is_chroma: is_chroma, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_chroma` [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: 5th binding whose name is just one char [INFO] [stderr] --> src/image.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | let a = self.a; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:172:13 [INFO] [stderr] | [INFO] [stderr] 172 | r: r, [INFO] [stderr] | ^^^^ help: replace it with: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | g: g, [INFO] [stderr] | ^^^^ help: replace it with: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:174:13 [INFO] [stderr] | [INFO] [stderr] 174 | b: b, [INFO] [stderr] | ^^^^ help: replace it with: `b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/linear.rs:156:13 [INFO] [stderr] | [INFO] [stderr] 156 | g: g, [INFO] [stderr] | ^^^^ help: replace it with: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/dssim.rs:88:13 [INFO] [stderr] | [INFO] [stderr] 88 | is_chroma: is_chroma, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `is_chroma` [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: 5th binding whose name is just one char [INFO] [stderr] --> src/image.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | let a = self.a; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:172:13 [INFO] [stderr] | [INFO] [stderr] 172 | r: r, [INFO] [stderr] | ^^^^ help: replace it with: `r` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | g: g, [INFO] [stderr] | ^^^^ help: replace it with: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/image.rs:174:13 [INFO] [stderr] | [INFO] [stderr] 174 | b: b, [INFO] [stderr] | ^^^^ help: replace it with: `b` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/linear.rs:156:13 [INFO] [stderr] | [INFO] [stderr] 156 | g: g, [INFO] [stderr] | ^^^^ help: replace it with: `g` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:129:9 [INFO] [stderr] | [INFO] [stderr] 129 | / return multizip((blurred[0].iter().cloned(), blurred[1].iter().cloned(), blurred[2].iter().cloned())).map(|(l,a,b)| { [INFO] [stderr] 130 | | LAB {l,a,b} [INFO] [stderr] 131 | | }).collect(); [INFO] [stderr] | |_____________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 129 | multizip((blurred[0].iter().cloned(), blurred[1].iter().cloned(), blurred[2].iter().cloned())).map(|(l,a,b)| { [INFO] [stderr] 130 | LAB {l,a,b} [INFO] [stderr] 131 | }).collect() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | return out; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `out` [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/dssim.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | return downsampled; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `downsampled` [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/dssim.rs:226:9 [INFO] [stderr] | [INFO] [stderr] 226 | / return Some(DssimImage { [INFO] [stderr] 227 | | scale: all_sizes.into_par_iter().map(|s| { [INFO] [stderr] 228 | | DssimChanScale { [INFO] [stderr] 229 | | chan: s.into_par_iter().enumerate().map(|(n,l)| { [INFO] [stderr] ... | [INFO] [stderr] 245 | | }).collect(), [INFO] [stderr] 246 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 226 | Some(DssimImage { [INFO] [stderr] 227 | scale: all_sizes.into_par_iter().map(|s| { [INFO] [stderr] 228 | DssimChanScale { [INFO] [stderr] 229 | chan: s.into_par_iter().enumerate().map(|(n,l)| { [INFO] [stderr] 230 | let w = l.width(); [INFO] [stderr] 231 | let h = l.height(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | return (to_dssim(ssim_sum / weight_sum).into(), ssim_maps); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(to_dssim(ssim_sum / weight_sum).into(), ssim_maps)` [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/dssim.rs:384:9 [INFO] [stderr] | [INFO] [stderr] 384 | return ImgVec::new(map_out, width, height); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ImgVec::new(map_out, width, height)` [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/dssim.rs:390:5 [INFO] [stderr] | [INFO] [stderr] 390 | return 1.0 / ssim.min(1.0) - 1.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `1.0 / ssim.min(1.0) - 1.0` [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/image.rs:220:9 [INFO] [stderr] | [INFO] [stderr] 220 | return Some(Img::new(scaled, half_width, half_height)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Img::new(scaled, half_width, half_height))` [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/image.rs:216:13 [INFO] [stderr] | [INFO] [stderr] 216 | return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| Average4::average4(a[0], a[1], b[0], b[1])) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| Average4::average4(a[0], a[1], b[0], b[1]))` [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/image.rs:240:9 [INFO] [stderr] | [INFO] [stderr] 240 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 241 | | a[0].min(a[1]).min(b[0].min(b[1])) [INFO] [stderr] 242 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 240 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 241 | a[0].min(a[1]).min(b[0].min(b[1])) [INFO] [stderr] 242 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/image.rs:265:9 [INFO] [stderr] | [INFO] [stderr] 265 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 266 | | (a[0].min(a[1]).min(b[0].min(b[1])) + ((a[0] + a[1] + b[0] + b[1]) * 0.25))*0.5 [INFO] [stderr] 267 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 265 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 266 | (a[0].min(a[1]).min(b[0].min(b[1])) + ((a[0] + a[1] + b[0] + b[1]) * 0.25))*0.5 [INFO] [stderr] 267 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/image.rs:290:9 [INFO] [stderr] | [INFO] [stderr] 290 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 291 | | (a[0] + a[1] + b[0] + b[1]) * 0.25 [INFO] [stderr] 292 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 290 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 291 | (a[0] + a[1] + b[0] + b[1]) * 0.25 [INFO] [stderr] 292 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tolab.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / return ( [INFO] [stderr] 32 | | Y * 1.16, [INFO] [stderr] 33 | | (86.2/ 220.0 + 500.0/ 220.0 * (X - Y)), /* 86 is a fudge to make the value positive */ [INFO] [stderr] 34 | | (107.9/ 220.0 + 200.0/ 220.0 * (Y - Z)), /* 107 is a fudge to make the value positive */ [INFO] [stderr] 35 | | ); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 31 | ( [INFO] [stderr] 32 | Y * 1.16, [INFO] [stderr] 33 | (86.2/ 220.0 + 500.0/ 220.0 * (X - Y)), /* 86 is a fudge to make the value positive */ [INFO] [stderr] 34 | (107.9/ 220.0 + 200.0/ 220.0 * (Y - Z)), /* 107 is a fudge to make the value positive */ [INFO] [stderr] 35 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:129:9 [INFO] [stderr] | [INFO] [stderr] 129 | / return multizip((blurred[0].iter().cloned(), blurred[1].iter().cloned(), blurred[2].iter().cloned())).map(|(l,a,b)| { [INFO] [stderr] 130 | | LAB {l,a,b} [INFO] [stderr] 131 | | }).collect(); [INFO] [stderr] | |_____________________^ [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] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 129 | multizip((blurred[0].iter().cloned(), blurred[1].iter().cloned(), blurred[2].iter().cloned())).map(|(l,a,b)| { [INFO] [stderr] 130 | LAB {l,a,b} [INFO] [stderr] 131 | }).collect() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | return out; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `out` [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/dssim.rs:201:9 [INFO] [stderr] | [INFO] [stderr] 201 | return downsampled; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `downsampled` [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/dssim.rs:226:9 [INFO] [stderr] | [INFO] [stderr] 226 | / return Some(DssimImage { [INFO] [stderr] 227 | | scale: all_sizes.into_par_iter().map(|s| { [INFO] [stderr] 228 | | DssimChanScale { [INFO] [stderr] 229 | | chan: s.into_par_iter().enumerate().map(|(n,l)| { [INFO] [stderr] ... | [INFO] [stderr] 245 | | }).collect(), [INFO] [stderr] 246 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 226 | Some(DssimImage { [INFO] [stderr] 227 | scale: all_sizes.into_par_iter().map(|s| { [INFO] [stderr] 228 | DssimChanScale { [INFO] [stderr] 229 | chan: s.into_par_iter().enumerate().map(|(n,l)| { [INFO] [stderr] 230 | let w = l.width(); [INFO] [stderr] 231 | let h = l.height(); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/dssim.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | return (to_dssim(ssim_sum / weight_sum).into(), ssim_maps); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(to_dssim(ssim_sum / weight_sum).into(), ssim_maps)` [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/dssim.rs:384:9 [INFO] [stderr] | [INFO] [stderr] 384 | return ImgVec::new(map_out, width, height); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `ImgVec::new(map_out, width, height)` [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/dssim.rs:390:5 [INFO] [stderr] | [INFO] [stderr] 390 | return 1.0 / ssim.min(1.0) - 1.0; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `1.0 / ssim.min(1.0) - 1.0` [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: long literal lacking separators [INFO] [stderr] --> src/dssim.rs:410:14 [INFO] [stderr] | [INFO] [stderr] 410 | assert!((0.003297 - res).abs() < 0.0001, "res is {}", res); [INFO] [stderr] | ^^^^^^^^ help: consider: `0.003_297` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/dssim.rs:417:13 [INFO] [stderr] | [INFO] [stderr] 417 | assert!(0.000000000000001 > res); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider: `0.000_000_000_000_001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/dssim.rs:418:19 [INFO] [stderr] | [INFO] [stderr] 418 | assert!(res < 0.000000000000001); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider: `0.000_000_000_000_001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/dssim.rs:451:19 [INFO] [stderr] | [INFO] [stderr] 451 | assert!(res < 0.000001); [INFO] [stderr] | ^^^^^^^^ help: consider: `0.000_001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/image.rs:220:9 [INFO] [stderr] | [INFO] [stderr] 220 | return Some(Img::new(scaled, half_width, half_height)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(Img::new(scaled, half_width, half_height))` [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/image.rs:216:13 [INFO] [stderr] | [INFO] [stderr] 216 | return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| Average4::average4(a[0], a[1], b[0], b[1])) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| Average4::average4(a[0], a[1], b[0], b[1]))` [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/image.rs:240:9 [INFO] [stderr] | [INFO] [stderr] 240 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 241 | | a[0].min(a[1]).min(b[0].min(b[1])) [INFO] [stderr] 242 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 240 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 241 | a[0].min(a[1]).min(b[0].min(b[1])) [INFO] [stderr] 242 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/image.rs:265:9 [INFO] [stderr] | [INFO] [stderr] 265 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 266 | | (a[0].min(a[1]).min(b[0].min(b[1])) + ((a[0] + a[1] + b[0] + b[1]) * 0.25))*0.5 [INFO] [stderr] 267 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 265 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 266 | (a[0].min(a[1]).min(b[0].min(b[1])) + ((a[0] + a[1] + b[0] + b[1]) * 0.25))*0.5 [INFO] [stderr] 267 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/image.rs:290:9 [INFO] [stderr] | [INFO] [stderr] 290 | / return top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 291 | | (a[0] + a[1] + b[0] + b[1]) * 0.25 [INFO] [stderr] 292 | | }); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 290 | top.chunks(2).zip(bot.chunks(2)).map(|(a,b)| { [INFO] [stderr] 291 | (a[0] + a[1] + b[0] + b[1]) * 0.25 [INFO] [stderr] 292 | }) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/tolab.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / return ( [INFO] [stderr] 32 | | Y * 1.16, [INFO] [stderr] 33 | | (86.2/ 220.0 + 500.0/ 220.0 * (X - Y)), /* 86 is a fudge to make the value positive */ [INFO] [stderr] 34 | | (107.9/ 220.0 + 200.0/ 220.0 * (Y - Z)), /* 107 is a fudge to make the value positive */ [INFO] [stderr] 35 | | ); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 31 | ( [INFO] [stderr] 32 | Y * 1.16, [INFO] [stderr] 33 | (86.2/ 220.0 + 500.0/ 220.0 * (X - Y)), /* 86 is a fudge to make the value positive */ [INFO] [stderr] 34 | (107.9/ 220.0 + 200.0/ 220.0 * (Y - Z)), /* 107 is a fudge to make the value positive */ [INFO] [stderr] 35 | ) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/dssim.rs:37:23 [INFO] [stderr] | [INFO] [stderr] 37 | fn img1_img2_blur<'a>(&self, modified: &mut Self, tmp: &mut [I]) -> Vec; [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `dssim::Dssim` [INFO] [stderr] --> src/dssim.rs:163:5 [INFO] [stderr] | [INFO] [stderr] 163 | / pub fn new() -> Dssim { [INFO] [stderr] 164 | | Dssim { [INFO] [stderr] 165 | | scale_weights: DEFAULT_WEIGHTS[0..4].to_owned(), [INFO] [stderr] 166 | | save_maps_scales: 0, [INFO] [stderr] 167 | | } [INFO] [stderr] 168 | | } [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] 50 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/dssim.rs:285:63 [INFO] [stderr] | [INFO] [stderr] 285 | let sum = half.buf.iter().fold(0., |sum, i| sum + *i as f64); [INFO] [stderr] | ^^^^^^^^^ help: try: `f64::from(*i)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/image.rs:94:9 [INFO] [stderr] | [INFO] [stderr] 94 | other.avg() as f64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(other.avg())` [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: the loop variable `i` is used to index `dstrow` [INFO] [stderr] --> src/blur.rs:146:22 [INFO] [stderr] | [INFO] [stderr] 146 | for i in 1..width-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] 146 | for (i, ) in dstrow.iter_mut().enumerate().take(width-1).skip(1) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/val.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / fn ne(&self, other: &Dssim) -> bool { [INFO] [stderr] 37 | | *self != other.0 [INFO] [stderr] 38 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/val.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / fn ne(&self, other: &f64) -> bool { [INFO] [stderr] 47 | | self.0 != *other [INFO] [stderr] 48 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/linear.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | (0..Self::Component::max_value() + 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0..=Self::Component::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/linear.rs:130:22 [INFO] [stderr] | [INFO] [stderr] 130 | let a_unit = self.1.clone().into() / M::max_value() as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:20 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:45 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:70 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:20 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:45 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:70 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:20 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:45 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:70 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/tolab.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | / fn rgb_to_lab<'a, T: Copy + Sync + Send + 'static, F>(img: ImgRef<'a, T>, cb: F) -> Vec [INFO] [stderr] 88 | | where F: Fn(T, usize) -> (f32, f32, f32) + Sync + Send + 'static [INFO] [stderr] 89 | | { [INFO] [stderr] 90 | | let width = img.width(); [INFO] [stderr] ... | [INFO] [stderr] 125 | | ]; [INFO] [stderr] 126 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/dssim.rs:37:23 [INFO] [stderr] | [INFO] [stderr] 37 | fn img1_img2_blur<'a>(&self, modified: &mut Self, tmp: &mut [I]) -> Vec; [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `dssim::Dssim` [INFO] [stderr] --> src/dssim.rs:163:5 [INFO] [stderr] | [INFO] [stderr] 163 | / pub fn new() -> Dssim { [INFO] [stderr] 164 | | Dssim { [INFO] [stderr] 165 | | scale_weights: DEFAULT_WEIGHTS[0..4].to_owned(), [INFO] [stderr] 166 | | save_maps_scales: 0, [INFO] [stderr] 167 | | } [INFO] [stderr] 168 | | } [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] 50 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/dssim.rs:285:63 [INFO] [stderr] | [INFO] [stderr] 285 | let sum = half.buf.iter().fold(0., |sum, i| sum + *i as f64); [INFO] [stderr] | ^^^^^^^^^ help: try: `f64::from(*i)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/image.rs:94:9 [INFO] [stderr] | [INFO] [stderr] 94 | other.avg() as f64 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `f64::from(other.avg())` [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: the loop variable `i` is used to index `dstrow` [INFO] [stderr] --> src/blur.rs:146:22 [INFO] [stderr] | [INFO] [stderr] 146 | for i in 1..width-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] 146 | for (i, ) in dstrow.iter_mut().enumerate().take(width-1).skip(1) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:188:5 [INFO] [stderr] | [INFO] [stderr] 188 | assert_eq!(0.25, dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:188:5 [INFO] [stderr] | [INFO] [stderr] 188 | assert_eq!(0.25, dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:226:5 [INFO] [stderr] | [INFO] [stderr] 226 | assert_eq!(1./256., dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:226:5 [INFO] [stderr] | [INFO] [stderr] 226 | assert_eq!(1./256., dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:227:5 [INFO] [stderr] | [INFO] [stderr] 227 | assert_eq!(1./256., dst[5*5-1]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:227:5 [INFO] [stderr] | [INFO] [stderr] 227 | assert_eq!(1./256., dst[5*5-1]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:231:5 [INFO] [stderr] | [INFO] [stderr] 231 | assert_eq!(center, dst[2*5+2]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:231:5 [INFO] [stderr] | [INFO] [stderr] 231 | assert_eq!(center, dst[2*5+2]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:269:5 [INFO] [stderr] | [INFO] [stderr] 269 | assert_eq!(1., dst[3]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:269:5 [INFO] [stderr] | [INFO] [stderr] 269 | assert_eq!(1., dst[3]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:270:5 [INFO] [stderr] | [INFO] [stderr] 270 | assert_eq!(1., dst[3 * 4]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:270:5 [INFO] [stderr] | [INFO] [stderr] 270 | assert_eq!(1., dst[3 * 4]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:271:5 [INFO] [stderr] | [INFO] [stderr] 271 | assert_eq!(1., dst[4 * 4 - 1]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:271:5 [INFO] [stderr] | [INFO] [stderr] 271 | assert_eq!(1., dst[4 * 4 - 1]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/blur.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | assert_eq!(exp, dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/blur.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | assert_eq!(exp, dst[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/val.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | / fn ne(&self, other: &Dssim) -> bool { [INFO] [stderr] 37 | | *self != other.0 [INFO] [stderr] 38 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/val.rs:46:5 [INFO] [stderr] | [INFO] [stderr] 46 | / fn ne(&self, other: &f64) -> bool { [INFO] [stderr] 47 | | self.0 != *other [INFO] [stderr] 48 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/linear.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | (0..Self::Component::max_value() + 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0..=Self::Component::max_value())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/linear.rs:130:22 [INFO] [stderr] | [INFO] [stderr] 130 | let a_unit = self.1.clone().into() / M::max_value() as f32; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: casting f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:20 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:45 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:21:70 [INFO] [stderr] | [INFO] [stderr] 21 | let fx = ((self.r as f64 * 0.4124 + self.g as f64 * 0.3576 + self.b as f64 * 0.1805) / D65x) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:20 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:45 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:22:70 [INFO] [stderr] | [INFO] [stderr] 22 | let fy = ((self.r as f64 * 0.2126 + self.g as f64 * 0.7152 + self.b as f64 * 0.0722) / D65y) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:20 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.r)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:45 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.g)` [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 f32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/tolab.rs:23:70 [INFO] [stderr] | [INFO] [stderr] 23 | let fz = ((self.r as f64 * 0.0193 + self.g as f64 * 0.1192 + self.b as f64 * 0.9505) / D65z) as f32; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(self.b)` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/tolab.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | / fn rgb_to_lab<'a, T: Copy + Sync + Send + 'static, F>(img: ImgRef<'a, T>, cb: F) -> Vec [INFO] [stderr] 88 | | where F: Fn(T, usize) -> (f32, f32, f32) + Sync + Send + 'static [INFO] [stderr] 89 | | { [INFO] [stderr] 90 | | let width = img.width(); [INFO] [stderr] ... | [INFO] [stderr] 125 | | ]; [INFO] [stderr] 126 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: aborting due to 8 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `dssim`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "a51887b653f7d209e53522e278fb12e3c2ccc423e65609b628188f68969826b5"` [INFO] running `"docker" "rm" "-f" "a51887b653f7d209e53522e278fb12e3c2ccc423e65609b628188f68969826b5"` [INFO] [stdout] a51887b653f7d209e53522e278fb12e3c2ccc423e65609b628188f68969826b5