[INFO] crate mini_gl_fb 0.6.0 is already in cache [INFO] extracting crate mini_gl_fb 0.6.0 into work/ex/clippy-test-run/sources/stable/reg/mini_gl_fb/0.6.0 [INFO] extracting crate mini_gl_fb 0.6.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/mini_gl_fb/0.6.0 [INFO] validating manifest of mini_gl_fb-0.6.0 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 mini_gl_fb-0.6.0 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 mini_gl_fb-0.6.0 [INFO] finished frobbing mini_gl_fb-0.6.0 [INFO] frobbed toml for mini_gl_fb-0.6.0 written to work/ex/clippy-test-run/sources/stable/reg/mini_gl_fb/0.6.0/Cargo.toml [INFO] started frobbing mini_gl_fb-0.6.0 [INFO] finished frobbing mini_gl_fb-0.6.0 [INFO] frobbed toml for mini_gl_fb-0.6.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/mini_gl_fb/0.6.0/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 mini_gl_fb-0.6.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/mini_gl_fb/0.6.0:/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] 565b8574009612168a3ac685fc7dddcf964271fceaa74ed4e3d03f26a0f1ab45 [INFO] running `"docker" "start" "-a" "565b8574009612168a3ac685fc7dddcf964271fceaa74ed4e3d03f26a0f1ab45"` [INFO] [stderr] Checking rustic_gl v0.3.2 [INFO] [stderr] Checking mini_gl_fb v0.6.0 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/core.rs:240:20 [INFO] [stderr] | [INFO] [stderr] 240 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 241 | | if redraw { [INFO] [stderr] 242 | | self.fb.redraw(); [INFO] [stderr] 243 | | self.gl_window.swap_buffers().unwrap(); [INFO] [stderr] 244 | | } [INFO] [stderr] 245 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 240 | } else if redraw { [INFO] [stderr] 241 | self.fb.redraw(); [INFO] [stderr] 242 | self.gl_window.swap_buffers().unwrap(); [INFO] [stderr] 243 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/core.rs:240:20 [INFO] [stderr] | [INFO] [stderr] 240 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 241 | | if redraw { [INFO] [stderr] 242 | | self.fb.redraw(); [INFO] [stderr] 243 | | self.gl_window.swap_buffers().unwrap(); [INFO] [stderr] 244 | | } [INFO] [stderr] 245 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 240 | } else if redraw { [INFO] [stderr] 241 | self.fb.redraw(); [INFO] [stderr] 242 | self.gl_window.swap_buffers().unwrap(); [INFO] [stderr] 243 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/core.rs:169:23 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn is_running(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | / match event { [INFO] [stderr] 174 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 175 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 176 | | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 189 | | _ => {}, [INFO] [stderr] 190 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 174 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 175 | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] 176 | if let Some(k) = input.virtual_keycode { [INFO] [stderr] 177 | if k == VirtualKeyCode::Escape [INFO] [stderr] 178 | && input.state == ElementState::Released { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:214:17 [INFO] [stderr] | [INFO] [stderr] 214 | / match event { [INFO] [stderr] 215 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 216 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 217 | | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 230 | | _ => {}, [INFO] [stderr] 231 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 214 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 215 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 216 | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] 217 | if let Some(k) = input.virtual_keycode { [INFO] [stderr] 218 | if k == VirtualKeyCode::Escape [INFO] [stderr] 219 | && input.state == ElementState::Released { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/core.rs:266:33 [INFO] [stderr] | [INFO] [stderr] 266 | for (_, val) in &mut input.keys { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 266 | for val in input.keys.values_mut() { [INFO] [stderr] | ^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/core.rs:269:33 [INFO] [stderr] | [INFO] [stderr] 269 | for (_, val) in &mut input.mouse { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 269 | for val in input.mouse.values_mut() { [INFO] [stderr] | ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | / match event { [INFO] [stderr] 273 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 274 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 275 | | WindowEvent::KeyboardInput { input: event_input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 298 | | _ => {}, [INFO] [stderr] 299 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 272 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 273 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 274 | WindowEvent::KeyboardInput { input: event_input, .. } => { [INFO] [stderr] 275 | if let Some(vk) = event_input.virtual_keycode { [INFO] [stderr] 276 | let key = input.keys.entry(vk) [INFO] [stderr] 277 | .or_insert((false, false)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:310:31 [INFO] [stderr] | [INFO] [stderr] 310 | let x_scale = self.fb.buffer_width as f64 / (self.fb.vp_width as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_width)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:310:61 [INFO] [stderr] | [INFO] [stderr] 310 | let x_scale = self.fb.buffer_width as f64 / (self.fb.vp_width as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.vp_width)` [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/core.rs:311:31 [INFO] [stderr] | [INFO] [stderr] 311 | let y_scale = self.fb.buffer_height as f64 / (self.fb.vp_height as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_height)` [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/core.rs:311:62 [INFO] [stderr] | [INFO] [stderr] 311 | let y_scale = self.fb.buffer_height as f64 / (self.fb.vp_height as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.vp_height)` [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/core.rs:315:21 [INFO] [stderr] | [INFO] [stderr] 315 | self.fb.buffer_height as f64 - y * y_scale [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_height)` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/core.rs:491:19 [INFO] [stderr] | [INFO] [stderr] 491 | fn components(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core.rs:599:9 [INFO] [stderr] | [INFO] [stderr] 599 | / if let &Some(shader) = shader { [INFO] [stderr] 600 | | gl::AttachShader(program, shader); [INFO] [stderr] 601 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 599 | if let Some(shader) = *shader { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core.rs:607:9 [INFO] [stderr] | [INFO] [stderr] 607 | / if let &Some(shader) = shader { [INFO] [stderr] 608 | | gl::DetachShader(program, shader); [INFO] [stderr] 609 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 607 | if let Some(shader) = *shader { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/breakout.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | / if let &(_, true) = self.mouse.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] 51 | | true [INFO] [stderr] 52 | | } else { [INFO] [stderr] 53 | | false [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 50 | if let (_, true) = *self.mouse.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/breakout.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | / if let &(_, true) = self.keys.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] 70 | | true [INFO] [stderr] 71 | | } else { [INFO] [stderr] 72 | | false [INFO] [stderr] 73 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 69 | if let (_, true) = *self.keys.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:183:23 [INFO] [stderr] | [INFO] [stderr] 183 | pub fn is_running(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/core.rs:169:23 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn is_running(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:173:13 [INFO] [stderr] | [INFO] [stderr] 173 | / match event { [INFO] [stderr] 174 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 175 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 176 | | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 189 | | _ => {}, [INFO] [stderr] 190 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 174 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 175 | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] 176 | if let Some(k) = input.virtual_keycode { [INFO] [stderr] 177 | if k == VirtualKeyCode::Escape [INFO] [stderr] 178 | && input.state == ElementState::Released { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:214:17 [INFO] [stderr] | [INFO] [stderr] 214 | / match event { [INFO] [stderr] 215 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 216 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 217 | | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 230 | | _ => {}, [INFO] [stderr] 231 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 214 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 215 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 216 | WindowEvent::KeyboardInput { input, .. } => { [INFO] [stderr] 217 | if let Some(k) = input.virtual_keycode { [INFO] [stderr] 218 | if k == VirtualKeyCode::Escape [INFO] [stderr] 219 | && input.state == ElementState::Released { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/core.rs:266:33 [INFO] [stderr] | [INFO] [stderr] 266 | for (_, val) in &mut input.keys { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 266 | for val in input.keys.values_mut() { [INFO] [stderr] | ^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/core.rs:269:33 [INFO] [stderr] | [INFO] [stderr] 269 | for (_, val) in &mut input.mouse { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 269 | for val in input.mouse.values_mut() { [INFO] [stderr] | ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/core.rs:272:17 [INFO] [stderr] | [INFO] [stderr] 272 | / match event { [INFO] [stderr] 273 | | Event::WindowEvent { event, .. } => match event { [INFO] [stderr] 274 | | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 275 | | WindowEvent::KeyboardInput { input: event_input, .. } => { [INFO] [stderr] ... | [INFO] [stderr] 298 | | _ => {}, [INFO] [stderr] 299 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 272 | if let Event::WindowEvent { event, .. } = event { match event { [INFO] [stderr] 273 | WindowEvent::CloseRequested => running = false, [INFO] [stderr] 274 | WindowEvent::KeyboardInput { input: event_input, .. } => { [INFO] [stderr] 275 | if let Some(vk) = event_input.virtual_keycode { [INFO] [stderr] 276 | let key = input.keys.entry(vk) [INFO] [stderr] 277 | .or_insert((false, false)); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:310:31 [INFO] [stderr] | [INFO] [stderr] 310 | let x_scale = self.fb.buffer_width as f64 / (self.fb.vp_width as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_width)` [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 i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/core.rs:310:61 [INFO] [stderr] | [INFO] [stderr] 310 | let x_scale = self.fb.buffer_width as f64 / (self.fb.vp_width as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.vp_width)` [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/core.rs:311:31 [INFO] [stderr] | [INFO] [stderr] 311 | let y_scale = self.fb.buffer_height as f64 / (self.fb.vp_height as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_height)` [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/core.rs:311:62 [INFO] [stderr] | [INFO] [stderr] 311 | let y_scale = self.fb.buffer_height as f64 / (self.fb.vp_height as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.vp_height)` [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/core.rs:315:21 [INFO] [stderr] | [INFO] [stderr] 315 | self.fb.buffer_height as f64 - y * y_scale [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.fb.buffer_height)` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/core.rs:491:19 [INFO] [stderr] | [INFO] [stderr] 491 | fn components(&self) -> usize { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core.rs:599:9 [INFO] [stderr] | [INFO] [stderr] 599 | / if let &Some(shader) = shader { [INFO] [stderr] 600 | | gl::AttachShader(program, shader); [INFO] [stderr] 601 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 599 | if let Some(shader) = *shader { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/core.rs:607:9 [INFO] [stderr] | [INFO] [stderr] 607 | / if let &Some(shader) = shader { [INFO] [stderr] 608 | | gl::DetachShader(program, shader); [INFO] [stderr] 609 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 607 | if let Some(shader) = *shader { [INFO] [stderr] | ^^^^^^^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/breakout.rs:50:9 [INFO] [stderr] | [INFO] [stderr] 50 | / if let &(_, true) = self.mouse.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] 51 | | true [INFO] [stderr] 52 | | } else { [INFO] [stderr] 53 | | false [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 50 | if let (_, true) = *self.mouse.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/breakout.rs:69:9 [INFO] [stderr] | [INFO] [stderr] 69 | / if let &(_, true) = self.keys.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] 70 | | true [INFO] [stderr] 71 | | } else { [INFO] [stderr] 72 | | false [INFO] [stderr] 73 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 69 | if let (_, true) = *self.keys.get(&button).unwrap_or(&(false, false)) { [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/lib.rs:183:23 [INFO] [stderr] | [INFO] [stderr] 183 | pub fn is_running(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: struct update has no effect, all the fields in the struct have already been specified [INFO] [stderr] --> examples/resizable.rs:11:12 [INFO] [stderr] | [INFO] [stderr] 11 | .. Default::default() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_update)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_update [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/game_of_life.rs:40:50 [INFO] [stderr] | [INFO] [stderr] 40 | let seconds = elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 * 1e-9; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(elapsed.subsec_nanos())` [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: this `if` has identical blocks [INFO] [stderr] --> examples/game_of_life.rs:140:43 [INFO] [stderr] | [INFO] [stderr] 140 | } else if neighbors[cell] > 3 { [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 141 | | // die from over population [INFO] [stderr] 142 | | cells[cell] = false; [INFO] [stderr] 143 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> examples/game_of_life.rs:137:37 [INFO] [stderr] | [INFO] [stderr] 137 | if neighbors[cell] <= 1 { [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 138 | | // die from under population [INFO] [stderr] 139 | | cells[cell] = false; [INFO] [stderr] 140 | | } else if neighbors[cell] > 3 { [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `mini_gl_fb`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> examples/custom_shaders.rs:110:17 [INFO] [stderr] | [INFO] [stderr] 110 | let j = i as f64 / 100.0; [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] error: build failed [INFO] running `"docker" "inspect" "565b8574009612168a3ac685fc7dddcf964271fceaa74ed4e3d03f26a0f1ab45"` [INFO] running `"docker" "rm" "-f" "565b8574009612168a3ac685fc7dddcf964271fceaa74ed4e3d03f26a0f1ab45"` [INFO] [stdout] 565b8574009612168a3ac685fc7dddcf964271fceaa74ed4e3d03f26a0f1ab45