[INFO] updating cached repository ggrochow/pnm-rs [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/ggrochow/pnm-rs [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/ggrochow/pnm-rs" "work/ex/clippy-test-run/sources/stable/gh/ggrochow/pnm-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/ggrochow/pnm-rs'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/ggrochow/pnm-rs" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ggrochow/pnm-rs"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ggrochow/pnm-rs'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e18d8cdd7c631dcce934ddf333b6919bc907a13f [INFO] sha for GitHub repo ggrochow/pnm-rs: e18d8cdd7c631dcce934ddf333b6919bc907a13f [INFO] validating manifest of ggrochow/pnm-rs on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of ggrochow/pnm-rs on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing ggrochow/pnm-rs [INFO] finished frobbing ggrochow/pnm-rs [INFO] frobbed toml for ggrochow/pnm-rs written to work/ex/clippy-test-run/sources/stable/gh/ggrochow/pnm-rs/Cargo.toml [INFO] started frobbing ggrochow/pnm-rs [INFO] finished frobbing ggrochow/pnm-rs [INFO] frobbed toml for ggrochow/pnm-rs written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ggrochow/pnm-rs/Cargo.toml [INFO] crate ggrochow/pnm-rs has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting ggrochow/pnm-rs against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/ggrochow/pnm-rs:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 79bab259bb354ef19c0c50091661afcf7f38be211d22561b90fd01b5c34d9303 [INFO] running `"docker" "start" "-a" "79bab259bb354ef19c0c50091661afcf7f38be211d22561b90fd01b5c34d9303"` [INFO] [stderr] Checking pnm-scale v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pbm.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pbm.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/pbm.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/pbm.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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/pbm.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/pbm.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/pbm.rs:350:13 [INFO] [stderr] | [INFO] [stderr] 350 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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/pbm.rs:351:13 [INFO] [stderr] | [INFO] [stderr] 351 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:353:13 [INFO] [stderr] | [INFO] [stderr] 353 | max_val: max_val, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `max_val` [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/pbm.rs:354:13 [INFO] [stderr] | [INFO] [stderr] 354 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/wall.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | p0: p0, [INFO] [stderr] | ^^^^^^ help: replace it with: `p0` [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/wall.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | p1: p1 [INFO] [stderr] | ^^^^^^ help: replace it with: `p1` [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/wall.rs:159:39 [INFO] [stderr] | [INFO] [stderr] 159 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `x` [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/wall.rs:159:45 [INFO] [stderr] | [INFO] [stderr] 159 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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/main.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | triangles: triangles [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `triangles` [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/main.rs:171:39 [INFO] [stderr] | [INFO] [stderr] 171 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `x` [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/main.rs:171:45 [INFO] [stderr] | [INFO] [stderr] 171 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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/pbm.rs:24:13 [INFO] [stderr] | [INFO] [stderr] 24 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pbm.rs:25:13 [INFO] [stderr] | [INFO] [stderr] 25 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/pbm.rs:28:13 [INFO] [stderr] | [INFO] [stderr] 28 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/pbm.rs:39:13 [INFO] [stderr] | [INFO] [stderr] 39 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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/pbm.rs:40:13 [INFO] [stderr] | [INFO] [stderr] 40 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/pbm.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/pbm.rs:350:13 [INFO] [stderr] | [INFO] [stderr] 350 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [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/pbm.rs:351:13 [INFO] [stderr] | [INFO] [stderr] 351 | width: width, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `width` [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/pbm.rs:353:13 [INFO] [stderr] | [INFO] [stderr] 353 | max_val: max_val, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `max_val` [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/pbm.rs:354:13 [INFO] [stderr] | [INFO] [stderr] 354 | raster: raster [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `raster` [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/wall.rs:12:13 [INFO] [stderr] | [INFO] [stderr] 12 | p0: p0, [INFO] [stderr] | ^^^^^^ help: replace it with: `p0` [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/wall.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | p1: p1 [INFO] [stderr] | ^^^^^^ help: replace it with: `p1` [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/wall.rs:159:39 [INFO] [stderr] | [INFO] [stderr] 159 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `x` [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/wall.rs:159:45 [INFO] [stderr] | [INFO] [stderr] 159 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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/main.rs:94:13 [INFO] [stderr] | [INFO] [stderr] 94 | triangles: triangles [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `triangles` [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/main.rs:171:39 [INFO] [stderr] | [INFO] [stderr] 171 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `x` [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/main.rs:171:45 [INFO] [stderr] | [INFO] [stderr] 171 | self.contains_point_vec(Vec2 {x: x, y: y}) [INFO] [stderr] | ^^^^ help: replace it with: `y` [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/pixel.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | return (self.total_rgb_val() as f64 / 3f64).round() as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(self.total_rgb_val() as f64 / 3f64).round() as i32` [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/pixel.rs:43:9 [INFO] [stderr] | [INFO] [stderr] 43 | return (self.total_rgb_val() as f64 / 3f64).round() as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(self.total_rgb_val() as f64 / 3f64).round() as i32` [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: private type `Triangle` in public interface (error E0446) [INFO] [stderr] --> src/pbm.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | / pub fn draw_triangle(&mut self, triangle: &Triangle) { [INFO] [stderr] 132 | | let top = triangle.get_top_walls(); [INFO] [stderr] 133 | | let bottom = triangle.get_bottom_walls(); [INFO] [stderr] 134 | | [INFO] [stderr] 135 | | self.fill_horizontal_space_between_walls(&top.0, &top.1, &triangle); [INFO] [stderr] 136 | | self.fill_horizontal_space_between_walls(&bottom.0, &bottom.1, &triangle); [INFO] [stderr] 137 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(private_in_public)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: private type `Triangle` in public interface (error E0446) [INFO] [stderr] --> src/pbm.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | / pub fn fill_horizontal_space_between_walls(&mut self, wall1: &Wall, wall2: &Wall, triangle: &Triangle) { [INFO] [stderr] 183 | | let mut start_y = wall1.greatest_min_y(wall2); [INFO] [stderr] 184 | | let mut end_y = wall1.lowest_max_y(wall2); [INFO] [stderr] 185 | | [INFO] [stderr] ... | [INFO] [stderr] 218 | | // don't include end-peices, check those to === 0.5, if so then do some edge checking [INFO] [stderr] 219 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: value assigned to `temp` is never read [INFO] [stderr] --> src/pbm.rs:85:21 [INFO] [stderr] | [INFO] [stderr] 85 | let mut temp = 0; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `temp` is never read [INFO] [stderr] --> src/pbm.rs:96:21 [INFO] [stderr] | [INFO] [stderr] 96 | let mut temp = 0; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x_pixel` [INFO] [stderr] --> src/pbm.rs:142:13 [INFO] [stderr] | [INFO] [stderr] 142 | let x_pixel = x_base as i32; [INFO] [stderr] | ^^^^^^^ help: consider using `_x_pixel` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `y_pixel` [INFO] [stderr] --> src/pbm.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | let y_pixel = y_base as i32; [INFO] [stderr] | ^^^^^^^ help: consider using `_y_pixel` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:140:13 [INFO] [stderr] | [INFO] [stderr] 140 | let mut x_base = x.floor(); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | let mut y_base = y.floor(); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | let mut end_y = wall1.lowest_max_y(wall2); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: private type `Triangle` in public interface (error E0446) [INFO] [stderr] --> src/pbm.rs:131:5 [INFO] [stderr] | [INFO] [stderr] 131 | / pub fn draw_triangle(&mut self, triangle: &Triangle) { [INFO] [stderr] 132 | | let top = triangle.get_top_walls(); [INFO] [stderr] 133 | | let bottom = triangle.get_bottom_walls(); [INFO] [stderr] 134 | | [INFO] [stderr] 135 | | self.fill_horizontal_space_between_walls(&top.0, &top.1, &triangle); [INFO] [stderr] 136 | | self.fill_horizontal_space_between_walls(&bottom.0, &bottom.1, &triangle); [INFO] [stderr] 137 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(private_in_public)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: private type `Triangle` in public interface (error E0446) [INFO] [stderr] --> src/pbm.rs:182:5 [INFO] [stderr] | [INFO] [stderr] 182 | / pub fn fill_horizontal_space_between_walls(&mut self, wall1: &Wall, wall2: &Wall, triangle: &Triangle) { [INFO] [stderr] 183 | | let mut start_y = wall1.greatest_min_y(wall2); [INFO] [stderr] 184 | | let mut end_y = wall1.lowest_max_y(wall2); [INFO] [stderr] 185 | | [INFO] [stderr] ... | [INFO] [stderr] 218 | | // don't include end-peices, check those to === 0.5, if so then do some edge checking [INFO] [stderr] 219 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #34537 [INFO] [stderr] [INFO] [stderr] warning: value assigned to `temp` is never read [INFO] [stderr] --> src/pbm.rs:85:21 [INFO] [stderr] | [INFO] [stderr] 85 | let mut temp = 0; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: value assigned to `temp` is never read [INFO] [stderr] --> src/pbm.rs:96:21 [INFO] [stderr] | [INFO] [stderr] 96 | let mut temp = 0; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `x_pixel` [INFO] [stderr] --> src/pbm.rs:142:13 [INFO] [stderr] | [INFO] [stderr] 142 | let x_pixel = x_base as i32; [INFO] [stderr] | ^^^^^^^ help: consider using `_x_pixel` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `y_pixel` [INFO] [stderr] --> src/pbm.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | let y_pixel = y_base as i32; [INFO] [stderr] | ^^^^^^^ help: consider using `_y_pixel` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/wall.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | let mut p0: Vec2; [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/wall.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | let mut p1: Vec2; [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_blank_pbm` [INFO] [stderr] --> src/pbm.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn new_blank_pbm(height: i32, width: i32) -> PBM { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fill_bottom_half` [INFO] [stderr] --> src/pbm.rs:61:5 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn fill_bottom_half(&mut self, fill_pixel: Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `draw_wall` [INFO] [stderr] --> src/pbm.rs:67:5 [INFO] [stderr] | [INFO] [stderr] 67 | pub fn draw_wall(&mut self, height: i32, x: i32, fill_pixel: Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `draw_line` [INFO] [stderr] --> src/pbm.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn draw_line(&mut self, x_start: i32, y_start: i32, x_end: i32, y_end: i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_pixel` [INFO] [stderr] --> src/pbm.rs:221:5 [INFO] [stderr] | [INFO] [stderr] 221 | pub fn get_pixel(&self, x: i32, y: i32) -> Pixel { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `set_pixel_no_offset` [INFO] [stderr] --> src/pbm.rs:242:5 [INFO] [stderr] | [INFO] [stderr] 242 | pub fn set_pixel_no_offset(&mut self, x: i32, y: i32, pixel: &Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `scale_up` [INFO] [stderr] --> src/pbm.rs:254:5 [INFO] [stderr] | [INFO] [stderr] 254 | pub fn scale_up(&mut self, scale: i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `convert_to` [INFO] [stderr] --> src/pbm.rs:283:5 [INFO] [stderr] | [INFO] [stderr] 283 | pub fn convert_to(&mut self, magic_number: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `plus` [INFO] [stderr] --> src/vec3.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn plus(&self, other: &Vec3) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `minus` [INFO] [stderr] --> src/vec3.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn minus(&self, other: &Vec3) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `multiply` [INFO] [stderr] --> src/vec3.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn multiply(&self, multiplier: f64) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `max_x` [INFO] [stderr] --> src/wall.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn max_x(&self) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `min_x` [INFO] [stderr] --> src/wall.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn min_x(&self) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_max_x` [INFO] [stderr] --> src/wall.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn lowest_max_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_max_x` [INFO] [stderr] --> src/wall.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn greatest_max_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_min_x` [INFO] [stderr] --> src/wall.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | pub fn lowest_min_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_min_x` [INFO] [stderr] --> src/wall.rs:57:5 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn greatest_min_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_max_y` [INFO] [stderr] --> src/wall.rs:89:5 [INFO] [stderr] | [INFO] [stderr] 89 | pub fn greatest_max_y(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:140:13 [INFO] [stderr] | [INFO] [stderr] 140 | let mut x_base = x.floor(); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:141:13 [INFO] [stderr] | [INFO] [stderr] 141 | let mut y_base = y.floor(); [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/pbm.rs:184:13 [INFO] [stderr] | [INFO] [stderr] 184 | let mut end_y = wall1.lowest_max_y(wall2); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_min_y` [INFO] [stderr] --> src/wall.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn lowest_min_y(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pbm.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for i in 0..height + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: use: `0..=height` [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/pbm.rs:110:9 [INFO] [stderr] | [INFO] [stderr] 110 | / let mut y_step = 1; [INFO] [stderr] 111 | | if y1 >= y2 { [INFO] [stderr] 112 | | y_step = -1; [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let y_step = if y1 >= y2 { -1 } else { 1 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pbm.rs:116:18 [INFO] [stderr] | [INFO] [stderr] 116 | for x in x1..(x2 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `x1..=x2` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:186:12 [INFO] [stderr] | [INFO] [stderr] 186 | if start_y.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(start_y.fract() - 0.5).abs() < error` [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/pbm.rs:186:12 [INFO] [stderr] | [INFO] [stderr] 186 | if start_y.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pbm.rs:191:22 [INFO] [stderr] | [INFO] [stderr] 191 | let y = base_y as f64 + 0.5; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(base_y)` [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] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:203:16 [INFO] [stderr] | [INFO] [stderr] 203 | if start.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(start.fract() - 0.5).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/pbm.rs:203:16 [INFO] [stderr] | [INFO] [stderr] 203 | if start.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:207:16 [INFO] [stderr] | [INFO] [stderr] 207 | if end.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(end.fract() - 0.5).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/pbm.rs:207:16 [INFO] [stderr] | [INFO] [stderr] 207 | if end.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pbm.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | self.raster.get(pixel_index as usize).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.raster.get(pixel_index as usize).unwrap()` [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/pbm.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | self.raster.get(pixel_index as usize).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.raster[pixel_index as usize]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/pbm.rs:279:9 [INFO] [stderr] | [INFO] [stderr] 279 | self.height = self.height * scale; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.height *= scale` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/pbm.rs:280:9 [INFO] [stderr] | [INFO] [stderr] 280 | self.width = self.width * scale; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.width *= scale` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/pbm.rs:291:20 [INFO] [stderr] | [INFO] [stderr] 291 | .split("\n") [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:43:17 [INFO] [stderr] | [INFO] [stderr] 43 | return (self.total_rgb_val() as f64 / 3f64).round() as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.total_rgb_val())` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:56:33 [INFO] [stderr] | [INFO] [stderr] 56 | let value_grey_percentage = value as f64 / max_val as f64; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(value)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:56:48 [INFO] [stderr] | [INFO] [stderr] 56 | let value_grey_percentage = value as f64 / max_val as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(max_val)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:57:30 [INFO] [stderr] | [INFO] [stderr] 57 | let rounded_rgb_value = (MAX_RGB_VALUE as f64 * value_grey_percentage).round(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(MAX_RGB_VALUE)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:66:33 [INFO] [stderr] | [INFO] [stderr] 66 | let value_grey_percentage = value as f64 / MAX_RGB_VALUE as f64; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(value)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:66:48 [INFO] [stderr] | [INFO] [stderr] 66 | let value_grey_percentage = value as f64 / MAX_RGB_VALUE as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(MAX_RGB_VALUE)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:67:30 [INFO] [stderr] | [INFO] [stderr] 67 | let rounded_rgb_value = (max_val as f64 * value_grey_percentage).round(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(max_val)` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/pixel.rs:84:9 [INFO] [stderr] | [INFO] [stderr] 84 | / match is_white { [INFO] [stderr] 85 | | true => String::from("1"), [INFO] [stderr] 86 | | false => String::from("0") [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if is_white { String::from("1") } else { String::from("0") }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/wall.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | / let mut p1: Vec2; [INFO] [stderr] 116 | | [INFO] [stderr] 117 | | if self.p0.y > self.p1.y { [INFO] [stderr] 118 | | p0 = self.p0.clone(); [INFO] [stderr] ... | [INFO] [stderr] 122 | | p1 = self.p0.clone(); [INFO] [stderr] 123 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let p1 = if self.p0.y > self.p1.y { ..; self.p1.clone() } else { ..; self.p0.clone() };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:137:12 [INFO] [stderr] | [INFO] [stderr] 137 | if pos.y == y { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(pos.y - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:137:12 [INFO] [stderr] | [INFO] [stderr] 137 | if pos.y == y { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:139:19 [INFO] [stderr] | [INFO] [stderr] 139 | } else if neg.y == y { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(neg.y - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:139:19 [INFO] [stderr] | [INFO] [stderr] 139 | } else if neg.y == y { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:141:19 [INFO] [stderr] | [INFO] [stderr] 141 | } else if (pos.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((pos.y * 100.0).round() / 100.0 - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:141:19 [INFO] [stderr] | [INFO] [stderr] 141 | } else if (pos.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:143:19 [INFO] [stderr] | [INFO] [stderr] 143 | } else if (neg.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((neg.y * 100.0).round() / 100.0 - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:143:19 [INFO] [stderr] | [INFO] [stderr] 143 | } else if (neg.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/wall.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | let ref p0 = self.p0; [INFO] [stderr] | ----^^^^^^----------- help: try: `let p0 = &self.p0;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/wall.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | let ref p1 = self.p1; [INFO] [stderr] | ----^^^^^^----------- help: try: `let p1 = &self.p1;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/wall.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | let mut p0: Vec2; [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/wall.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | let mut p1: Vec2; [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new_blank_pbm` [INFO] [stderr] --> src/pbm.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn new_blank_pbm(height: i32, width: i32) -> PBM { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `fill_bottom_half` [INFO] [stderr] --> src/pbm.rs:61:5 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn fill_bottom_half(&mut self, fill_pixel: Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `draw_wall` [INFO] [stderr] --> src/pbm.rs:67:5 [INFO] [stderr] | [INFO] [stderr] 67 | pub fn draw_wall(&mut self, height: i32, x: i32, fill_pixel: Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `draw_line` [INFO] [stderr] --> src/pbm.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn draw_line(&mut self, x_start: i32, y_start: i32, x_end: i32, y_end: i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_pixel` [INFO] [stderr] --> src/pbm.rs:221:5 [INFO] [stderr] | [INFO] [stderr] 221 | pub fn get_pixel(&self, x: i32, y: i32) -> Pixel { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `set_pixel_no_offset` [INFO] [stderr] --> src/pbm.rs:242:5 [INFO] [stderr] | [INFO] [stderr] 242 | pub fn set_pixel_no_offset(&mut self, x: i32, y: i32, pixel: &Pixel) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `scale_up` [INFO] [stderr] --> src/pbm.rs:254:5 [INFO] [stderr] | [INFO] [stderr] 254 | pub fn scale_up(&mut self, scale: i32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `convert_to` [INFO] [stderr] --> src/pbm.rs:283:5 [INFO] [stderr] | [INFO] [stderr] 283 | pub fn convert_to(&mut self, magic_number: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `plus` [INFO] [stderr] --> src/vec3.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn plus(&self, other: &Vec3) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `minus` [INFO] [stderr] --> src/vec3.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn minus(&self, other: &Vec3) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `multiply` [INFO] [stderr] --> src/vec3.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn multiply(&self, multiplier: f64) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `max_x` [INFO] [stderr] --> src/wall.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn max_x(&self) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `min_x` [INFO] [stderr] --> src/wall.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn min_x(&self) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_max_x` [INFO] [stderr] --> src/wall.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | pub fn lowest_max_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_max_x` [INFO] [stderr] --> src/wall.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | pub fn greatest_max_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_min_x` [INFO] [stderr] --> src/wall.rs:49:5 [INFO] [stderr] | [INFO] [stderr] 49 | pub fn lowest_min_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_min_x` [INFO] [stderr] --> src/wall.rs:57:5 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn greatest_min_x(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `greatest_max_y` [INFO] [stderr] --> src/wall.rs:89:5 [INFO] [stderr] | [INFO] [stderr] 89 | pub fn greatest_max_y(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `lowest_min_y` [INFO] [stderr] --> src/wall.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn lowest_min_y(&self, other: &Wall) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `triangleJson` should have a snake case name such as `triangle_json` [INFO] [stderr] --> src/main.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | for triangleJson in json.triangles { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pbm.rs:70:18 [INFO] [stderr] | [INFO] [stderr] 70 | for i in 0..height + 1 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: use: `0..=height` [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/pbm.rs:110:9 [INFO] [stderr] | [INFO] [stderr] 110 | / let mut y_step = 1; [INFO] [stderr] 111 | | if y1 >= y2 { [INFO] [stderr] 112 | | y_step = -1; [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let y_step = if y1 >= y2 { -1 } else { 1 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/pbm.rs:116:18 [INFO] [stderr] | [INFO] [stderr] 116 | for x in x1..(x2 + 1) { [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `x1..=x2` [INFO] [stderr] | [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: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/main.rs:178:20 [INFO] [stderr] | [INFO] [stderr] 178 | if let Some(_) = get_distance_to_ray_line_intersection(&p0, &v0, &wall.p0, &wall.p1) { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 179 | | hit_count += 1 [INFO] [stderr] 180 | | } [INFO] [stderr] | |_____________- help: try this: `if get_distance_to_ray_line_intersection(&p0, &v0, &wall.p0, &wall.p1).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] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:186:12 [INFO] [stderr] | [INFO] [stderr] 186 | if start_y.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(start_y.fract() - 0.5).abs() < error` [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/pbm.rs:186:12 [INFO] [stderr] | [INFO] [stderr] 186 | if start_y.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pbm.rs:191:22 [INFO] [stderr] | [INFO] [stderr] 191 | let y = base_y as f64 + 0.5; [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `f64::from(base_y)` [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] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:203:16 [INFO] [stderr] | [INFO] [stderr] 203 | if start.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(start.fract() - 0.5).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/pbm.rs:203:16 [INFO] [stderr] | [INFO] [stderr] 203 | if start.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/pbm.rs:207:16 [INFO] [stderr] | [INFO] [stderr] 207 | if end.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(end.fract() - 0.5).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/pbm.rs:207:16 [INFO] [stderr] | [INFO] [stderr] 207 | if end.fract() == 0.5 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/pbm.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | self.raster.get(pixel_index as usize).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*self.raster.get(pixel_index as usize).unwrap()` [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: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/pbm.rs:224:9 [INFO] [stderr] | [INFO] [stderr] 224 | self.raster.get(pixel_index as usize).unwrap().clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `self.raster[pixel_index as usize]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] error: Could not compile `pnm-scale`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/pbm.rs:279:9 [INFO] [stderr] | [INFO] [stderr] 279 | self.height = self.height * scale; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.height *= scale` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/pbm.rs:280:9 [INFO] [stderr] | [INFO] [stderr] 280 | self.width = self.width * scale; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `self.width *= scale` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/pbm.rs:291:20 [INFO] [stderr] | [INFO] [stderr] 291 | .split("\n") [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:43:17 [INFO] [stderr] | [INFO] [stderr] 43 | return (self.total_rgb_val() as f64 / 3f64).round() as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.total_rgb_val())` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:56:33 [INFO] [stderr] | [INFO] [stderr] 56 | let value_grey_percentage = value as f64 / max_val as f64; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(value)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:56:48 [INFO] [stderr] | [INFO] [stderr] 56 | let value_grey_percentage = value as f64 / max_val as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(max_val)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:57:30 [INFO] [stderr] | [INFO] [stderr] 57 | let rounded_rgb_value = (MAX_RGB_VALUE as f64 * value_grey_percentage).round(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(MAX_RGB_VALUE)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:66:33 [INFO] [stderr] | [INFO] [stderr] 66 | let value_grey_percentage = value as f64 / MAX_RGB_VALUE as f64; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f64::from(value)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:66:48 [INFO] [stderr] | [INFO] [stderr] 66 | let value_grey_percentage = value as f64 / MAX_RGB_VALUE as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(MAX_RGB_VALUE)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/pixel.rs:67:30 [INFO] [stderr] | [INFO] [stderr] 67 | let rounded_rgb_value = (max_val as f64 * value_grey_percentage).round(); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(max_val)` [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: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/pixel.rs:84:9 [INFO] [stderr] | [INFO] [stderr] 84 | / match is_white { [INFO] [stderr] 85 | | true => String::from("1"), [INFO] [stderr] 86 | | false => String::from("0") [INFO] [stderr] 87 | | } [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if is_white { String::from("1") } else { String::from("0") }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/wall.rs:115:9 [INFO] [stderr] | [INFO] [stderr] 115 | / let mut p1: Vec2; [INFO] [stderr] 116 | | [INFO] [stderr] 117 | | if self.p0.y > self.p1.y { [INFO] [stderr] 118 | | p0 = self.p0.clone(); [INFO] [stderr] ... | [INFO] [stderr] 122 | | p1 = self.p0.clone(); [INFO] [stderr] 123 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let p1 = if self.p0.y > self.p1.y { ..; self.p1.clone() } else { ..; self.p0.clone() };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:137:12 [INFO] [stderr] | [INFO] [stderr] 137 | if pos.y == y { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(pos.y - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:137:12 [INFO] [stderr] | [INFO] [stderr] 137 | if pos.y == y { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:139:19 [INFO] [stderr] | [INFO] [stderr] 139 | } else if neg.y == y { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(neg.y - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:139:19 [INFO] [stderr] | [INFO] [stderr] 139 | } else if neg.y == y { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:141:19 [INFO] [stderr] | [INFO] [stderr] 141 | } else if (pos.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((pos.y * 100.0).round() / 100.0 - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:141:19 [INFO] [stderr] | [INFO] [stderr] 141 | } else if (pos.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/wall.rs:143:19 [INFO] [stderr] | [INFO] [stderr] 143 | } else if (neg.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `((neg.y * 100.0).round() / 100.0 - y).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/wall.rs:143:19 [INFO] [stderr] | [INFO] [stderr] 143 | } else if (neg.y * 100.0).round() / 100.0 == y { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/wall.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | let ref p0 = self.p0; [INFO] [stderr] | ----^^^^^^----------- help: try: `let p0 = &self.p0;` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/wall.rs:165:13 [INFO] [stderr] | [INFO] [stderr] 165 | let ref p1 = self.p1; [INFO] [stderr] | ----^^^^^^----------- help: try: `let p1 = &self.p1;` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: variable `triangleJson` should have a snake case name such as `triangle_json` [INFO] [stderr] --> src/main.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | for triangleJson in json.triangles { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/main.rs:178:20 [INFO] [stderr] | [INFO] [stderr] 178 | if let Some(_) = get_distance_to_ray_line_intersection(&p0, &v0, &wall.p0, &wall.p1) { [INFO] [stderr] | _____________- ^^^^^^^ [INFO] [stderr] 179 | | hit_count += 1 [INFO] [stderr] 180 | | } [INFO] [stderr] | |_____________- help: try this: `if get_distance_to_ray_line_intersection(&p0, &v0, &wall.p0, &wall.p1).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] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `pnm-scale`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "79bab259bb354ef19c0c50091661afcf7f38be211d22561b90fd01b5c34d9303"` [INFO] running `"docker" "rm" "-f" "79bab259bb354ef19c0c50091661afcf7f38be211d22561b90fd01b5c34d9303"` [INFO] [stdout] 79bab259bb354ef19c0c50091661afcf7f38be211d22561b90fd01b5c34d9303