[INFO] updating cached repository ryym/textris [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/ryym/textris [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/ryym/textris" "work/ex/clippy-test-run/sources/stable/gh/ryym/textris"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/ryym/textris'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/ryym/textris" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ryym/textris"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ryym/textris'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 1a2f584e2d8b4cb3218b2df562284e3cd95ad8f7 [INFO] sha for GitHub repo ryym/textris: 1a2f584e2d8b4cb3218b2df562284e3cd95ad8f7 [INFO] validating manifest of ryym/textris 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 ryym/textris 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 ryym/textris [INFO] finished frobbing ryym/textris [INFO] frobbed toml for ryym/textris written to work/ex/clippy-test-run/sources/stable/gh/ryym/textris/Cargo.toml [INFO] started frobbing ryym/textris [INFO] finished frobbing ryym/textris [INFO] frobbed toml for ryym/textris written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/ryym/textris/Cargo.toml [INFO] crate ryym/textris 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 ryym/textris against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/ryym/textris:/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] 6aca327e8e81fd735c08489a6ff52e11c015df01d588456480e87789127486e2 [INFO] running `"docker" "start" "-a" "6aca327e8e81fd735c08489a6ff52e11c015df01d588456480e87789127486e2"` [INFO] [stderr] Checking failure v0.1.2 [INFO] [stderr] Checking textris v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/screen.rs:110:53 [INFO] [stderr] | [INFO] [stderr] 110 | write!(self.stdout, "{}{}", Goto(x, y + 2), "?: Help")?; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: literal with an empty format string [INFO] [stderr] --> src/screen.rs:110:53 [INFO] [stderr] | [INFO] [stderr] 110 | write!(self.stdout, "{}{}", Goto(x, y + 2), "?: Help")?; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/inputs/mod.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | mod inputs; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/screen.rs:21:15 [INFO] [stderr] | [INFO] [stderr] 21 | const TITLE: &'static str = "- T E X T R I S -"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: module has the same name as its containing module [INFO] [stderr] --> src/inputs/mod.rs:8:1 [INFO] [stderr] | [INFO] [stderr] 8 | mod inputs; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::module_inception)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/screen.rs:21:15 [INFO] [stderr] | [INFO] [stderr] 21 | const TITLE: &'static str = "- T E X T R I S -"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:11:14 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn x(&self) -> i8 { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:15:14 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn y(&self) -> i8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:55:21 [INFO] [stderr] | [INFO] [stderr] 55 | pub fn to_coord(&self) -> Coord { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn next_dir(&self) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:73:21 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn opponent(&self) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:96:19 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn rotate(&self, dir: Dir) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 should consider deriving a `Default` implementation for `elapsed::Elapsed` [INFO] [stderr] --> src/elapsed.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> Self { [INFO] [stderr] 12 | | Elapsed { [INFO] [stderr] 13 | | hours: 0, [INFO] [stderr] 14 | | minutes: 0, [INFO] [stderr] 15 | | seconds: 0, [INFO] [stderr] 16 | | } [INFO] [stderr] 17 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/game.rs:45:18 [INFO] [stderr] | [INFO] [stderr] 45 | fn key_name(key: &Key) -> String { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Key` [INFO] [stderr] | [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: use of `expect` followed by a function call [INFO] [stderr] --> src/game.rs:78:15 [INFO] [stderr] | [INFO] [stderr] 78 | ).expect(&format!("show error dialog ({})", err)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("show error dialog ({})", err))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [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/game.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | / match self.handle_user_input(&mut play)? { [INFO] [stderr] 100 | | Some(action) => { [INFO] [stderr] 101 | | if action != Action::Ok { [INFO] [stderr] 102 | | return Ok(action); [INFO] [stderr] ... | [INFO] [stderr] 105 | | _ => {} [INFO] [stderr] 106 | | }; [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] 99 | if let Some(action) = self.handle_user_input(&mut play)? { [INFO] [stderr] 100 | if action != Action::Ok { [INFO] [stderr] 101 | return Ok(action); [INFO] [stderr] 102 | } [INFO] [stderr] 103 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/game.rs:109:24 [INFO] [stderr] | [INFO] [stderr] 109 | if let Err(_) = play.update() { [INFO] [stderr] | _________________- ^^^^^^ [INFO] [stderr] 110 | | return self.screen.render_game_over(&mut self.inputs, &play); [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________________- help: try this: `if play.update().is_err()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/game.rs:133:30 [INFO] [stderr] | [INFO] [stderr] 133 | .map(|action| Some(action)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/inputs/event_reader.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | self.key2order.get(&key).map(|order| *order) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.key2order.get(&key).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/inputs/inputs.rs:71:66 [INFO] [stderr] | [INFO] [stderr] 71 | Ok(event) => self.converter.order(event).map(|o| Ok(o)), [INFO] [stderr] | ^^^^^^^^^ help: remove closure as shown: `Ok` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inputs/keys.rs:21:25 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn key_to_order(&self) -> HashMap { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 should consider adding a `Default` implementation for `play::Play` [INFO] [stderr] --> src/play.rs:56:5 [INFO] [stderr] | [INFO] [stderr] 56 | / pub fn new() -> Self { [INFO] [stderr] 57 | | let mut random = Random::new(thread_rng()); [INFO] [stderr] 58 | | let next_tetro = random.random_tetro(); [INFO] [stderr] 59 | | [INFO] [stderr] ... | [INFO] [stderr] 74 | | play [INFO] [stderr] 75 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 55 | impl Default for play::Play { [INFO] [stderr] 56 | fn default() -> Self { [INFO] [stderr] 57 | Self::new() [INFO] [stderr] 58 | } [INFO] [stderr] 59 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/play.rs:79:26 [INFO] [stderr] | [INFO] [stderr] 79 | Tetromino::all().into_iter().fold(bm, |mut bm, &t| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/play.rs:112:10 [INFO] [stderr] | [INFO] [stderr] 112 | *self.block_map.get(&self.tetro).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.block_map[&self.tetro]` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/play.rs:116:10 [INFO] [stderr] | [INFO] [stderr] 116 | *self.block_map.get(&self.next_tetro).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.block_map[&self.next_tetro]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/screen.rs:53:18 [INFO] [stderr] | [INFO] [stderr] 53 | for i in 0..(TITLE.len() + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: use: `0..=TITLE.len()` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:11:14 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn x(&self) -> i8 { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:15:14 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn y(&self) -> i8 { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:55:21 [INFO] [stderr] | [INFO] [stderr] 55 | pub fn to_coord(&self) -> Coord { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:64:21 [INFO] [stderr] | [INFO] [stderr] 64 | pub fn next_dir(&self) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:73:21 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn opponent(&self) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/coord.rs:96:19 [INFO] [stderr] | [INFO] [stderr] 96 | pub fn rotate(&self, dir: Dir) -> Dir { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 should consider deriving a `Default` implementation for `elapsed::Elapsed` [INFO] [stderr] --> src/elapsed.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn new() -> Self { [INFO] [stderr] 12 | | Elapsed { [INFO] [stderr] 13 | | hours: 0, [INFO] [stderr] 14 | | minutes: 0, [INFO] [stderr] 15 | | seconds: 0, [INFO] [stderr] 16 | | } [INFO] [stderr] 17 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 4 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/screen.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | / match inputs.recv_order()? { [INFO] [stderr] 171 | | Ok(order) => match order { [INFO] [stderr] 172 | | Order::Move(Dir::Left) => { [INFO] [stderr] 173 | | if select > 0 { [INFO] [stderr] ... | [INFO] [stderr] 185 | | _ => {} [INFO] [stderr] 186 | | } [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] 170 | if let Ok(order) = inputs.recv_order()? { match order { [INFO] [stderr] 171 | Order::Move(Dir::Left) => { [INFO] [stderr] 172 | if select > 0 { [INFO] [stderr] 173 | select -= 1; [INFO] [stderr] 174 | } [INFO] [stderr] 175 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:28:24 [INFO] [stderr] | [INFO] [stderr] 28 | pub fn make_coords(&self, base: Coord, dir: Dir) -> TetroCoords { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:38:19 [INFO] [stderr] | [INFO] [stderr] 38 | fn make_moves(&self, dir: Dir) -> TetroCoords { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:86:25 [INFO] [stderr] | [INFO] [stderr] 86 | pub fn default_char(&self) -> char { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:99:26 [INFO] [stderr] | [INFO] [stderr] 99 | pub fn default_block(&self) -> Block { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/game.rs:45:18 [INFO] [stderr] | [INFO] [stderr] 45 | fn key_name(key: &Key) -> String { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `Key` [INFO] [stderr] | [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: use of `expect` followed by a function call [INFO] [stderr] --> src/game.rs:78:15 [INFO] [stderr] | [INFO] [stderr] 78 | ).expect(&format!("show error dialog ({})", err)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!("show error dialog ({})", err))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [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/game.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | / match self.handle_user_input(&mut play)? { [INFO] [stderr] 100 | | Some(action) => { [INFO] [stderr] 101 | | if action != Action::Ok { [INFO] [stderr] 102 | | return Ok(action); [INFO] [stderr] ... | [INFO] [stderr] 105 | | _ => {} [INFO] [stderr] 106 | | }; [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] 99 | if let Some(action) = self.handle_user_input(&mut play)? { [INFO] [stderr] 100 | if action != Action::Ok { [INFO] [stderr] 101 | return Ok(action); [INFO] [stderr] 102 | } [INFO] [stderr] 103 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_err()` [INFO] [stderr] --> src/game.rs:109:24 [INFO] [stderr] | [INFO] [stderr] 109 | if let Err(_) = play.update() { [INFO] [stderr] | _________________- ^^^^^^ [INFO] [stderr] 110 | | return self.screen.render_game_over(&mut self.inputs, &play); [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________________- help: try this: `if play.update().is_err()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/game.rs:133:30 [INFO] [stderr] | [INFO] [stderr] 133 | .map(|action| Some(action)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/inputs/event_reader.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | self.key2order.get(&key).map(|order| *order) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.key2order.get(&key).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: Could not compile `textris`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/inputs/inputs.rs:71:66 [INFO] [stderr] | [INFO] [stderr] 71 | Ok(event) => self.converter.order(event).map(|o| Ok(o)), [INFO] [stderr] | ^^^^^^^^^ help: remove closure as shown: `Ok` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/inputs/keys.rs:21:25 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn key_to_order(&self) -> HashMap { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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 should consider adding a `Default` implementation for `play::Play` [INFO] [stderr] --> src/play.rs:56:5 [INFO] [stderr] | [INFO] [stderr] 56 | / pub fn new() -> Self { [INFO] [stderr] 57 | | let mut random = Random::new(thread_rng()); [INFO] [stderr] 58 | | let next_tetro = random.random_tetro(); [INFO] [stderr] 59 | | [INFO] [stderr] ... | [INFO] [stderr] 74 | | play [INFO] [stderr] 75 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 55 | impl Default for play::Play { [INFO] [stderr] 56 | fn default() -> Self { [INFO] [stderr] 57 | Self::new() [INFO] [stderr] 58 | } [INFO] [stderr] 59 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/play.rs:79:26 [INFO] [stderr] | [INFO] [stderr] 79 | Tetromino::all().into_iter().fold(bm, |mut bm, &t| { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/play.rs:112:10 [INFO] [stderr] | [INFO] [stderr] 112 | *self.block_map.get(&self.tetro).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.block_map[&self.tetro]` [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/play.rs:116:10 [INFO] [stderr] | [INFO] [stderr] 116 | *self.block_map.get(&self.next_tetro).unwrap() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.block_map[&self.next_tetro]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/screen.rs:53:18 [INFO] [stderr] | [INFO] [stderr] 53 | for i in 0..(TITLE.len() + 1) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: use: `0..=TITLE.len()` [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/screen.rs:170:13 [INFO] [stderr] | [INFO] [stderr] 170 | / match inputs.recv_order()? { [INFO] [stderr] 171 | | Ok(order) => match order { [INFO] [stderr] 172 | | Order::Move(Dir::Left) => { [INFO] [stderr] 173 | | if select > 0 { [INFO] [stderr] ... | [INFO] [stderr] 185 | | _ => {} [INFO] [stderr] 186 | | } [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] 170 | if let Ok(order) = inputs.recv_order()? { match order { [INFO] [stderr] 171 | Order::Move(Dir::Left) => { [INFO] [stderr] 172 | if select > 0 { [INFO] [stderr] 173 | select -= 1; [INFO] [stderr] 174 | } [INFO] [stderr] 175 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:28:24 [INFO] [stderr] | [INFO] [stderr] 28 | pub fn make_coords(&self, base: Coord, dir: Dir) -> TetroCoords { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:38:19 [INFO] [stderr] | [INFO] [stderr] 38 | fn make_moves(&self, dir: Dir) -> TetroCoords { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:86:25 [INFO] [stderr] | [INFO] [stderr] 86 | pub fn default_char(&self) -> char { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/tetromino.rs:99:26 [INFO] [stderr] | [INFO] [stderr] 99 | pub fn default_block(&self) -> Block { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `textris`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "6aca327e8e81fd735c08489a6ff52e11c015df01d588456480e87789127486e2"` [INFO] running `"docker" "rm" "-f" "6aca327e8e81fd735c08489a6ff52e11c015df01d588456480e87789127486e2"` [INFO] [stdout] 6aca327e8e81fd735c08489a6ff52e11c015df01d588456480e87789127486e2